package com.kakarote.admin.service;

import com.alibaba.fastjson.JSONObject;
import com.kakarote.core.common.enums.AdminRoleTypeEnum;
import com.kakarote.admin.entity.PO.AdminMenu;
import com.kakarote.core.servlet.BaseService;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 后台菜单表 服务类
 * </p>
 *
 * @author zhangzhiwei
 * @since 2020-04-27
 */
public interface IAdminMenuService extends BaseService<AdminMenu> {
    /**
     * 查询用户所拥有的菜单权限
     *
     * @param userId    用户列表
     * @return 菜单权限的并集
     */
    public List<AdminMenu> queryMenuList(Long userId);

    /**
     * 查询项目管理用户所拥有的菜单权限
     *
     * @param userId    用户列表
     * @return 菜单权限的并集
     */
    public List<AdminMenu> queryProjectMenuList(Long userId, Long ProjectId);

    /**
     * 查询用户在项目管理所有的权限
     *
     * @param userId
     * @param companyId
     * @return
     */
    public List<AdminMenu> queryProjectUserMenuList(Long userId);

    /**
     * 通过角色列表查询菜单列表
     *
     * @param roleIds 角色ids
     * @return 菜单
     */
    public List<AdminMenu> queryMenuListByRoleIds(List<Long> roleIds);


    /**
     * 查询角色列表是否含有菜单权限
     *
     * @param roleIds 角色ids
     * @return 菜单
     */
    public Integer queryHasMenuAuthByByRoleIds(List<Long> roleIds, Long menuId);


    /**
     * 查询公海菜单权限
     *
     * @param userId 用户ID
     * @param deptId 部门ID
     * @return data
     */
    public Map<String, Long> queryPoolReadAuth(Long userId, Long deptId, List<Long> deptIds);

    /**
     * 根据类型查询菜单
     *
     * @param typeEnum type
     * @return data
     */
    public JSONObject getMenuListByType(AdminRoleTypeEnum typeEnum);

    /**
     * 根据权限标识查询菜单ID
     *
     * @param realm1 标识1
     * @param realm2 标识2
     * @param realm3 标识3
     * @return 菜单ID
     */
    Long queryMenuId(String realm1, String realm2, String realm3);

    /**
     * 查询所有菜单
     *
     * @return 菜单列表
     * @author zhangzhiwei
     */
    List<AdminMenu> queryAllMenuList();

    /**
     * 查询所有菜单
     *
     * @return 菜单列表
     * @author zhangzhiwei
     */
    List<AdminMenu> queryMenuListByProjectType(Integer projectType);


}
